iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
DevOps

在OpenStack Neutron的ovn-networking裡挖呀挖呀挖系列 第 5

Day-05: Logical Router連接Logical Switch

  • 分享至 

  • xImage
  •  

到目前為止,我們已經知道OVN的logical switch是如何運作的,其中包含了當二個namespace在不同的節點上,OVN是如何利用GENEVE做到跨節點通訊。Logical switch 的行為和真實的switch設備一樣,都是屬於L2的設備,如果讓在二個不同的網路的設備能夠通,則必需透過屬於Layer 3的Router來連接。在OVN裡,除了logical switch外,也提供了logical router提供L3的功能,連接多個L2的網路。

來看看今天要完成的邏輯網路架構長什麼樣子吧。今天會建立二個logical switch,分別使用192.168.1.0/24 與 10.10.0.0/24這二個不同的網路,在這二個logical switch上的namespace,是無法通訊,必需加上一個logical router將二個logical switch連接後,才能夠通信。

gh

今天的實驗環境,我們將三個namespace都建立在controller上,並不代表這三個namespace一定要在同一個節點上. 這些namespace是可以建立在任何的hypervisor上,作法都是相同的。等今天的內容結束後,有興趣的夥伴可以自己建立一個跨節點的logical router範例試試。

建立Logical Router 連接 Logical Switch

建立 192.168.1.0/24的邏輯網路

第一步先建立二個屬於相同192.168.1./0/24網段的namespace,再建立ls0將連接二個namespace。這一步和前二天Logical Switch的說明是完全一致,想必現在已經很熟悉了吧。也可以再次驗證,這個logical switch下的二個namespace是可以互相通信。

注意和前二天相比,建立namespace時,我們多給了一個default gateway ip。這個gateway way ip稍等會設定在logical router上。

cd /opt/iTHome-2023/day-05
source helper.sh

# 建立二個namespace
create-ns ns1 192.168.1.1 192.168.1.254
create-ns ns2 192.168.1.2 192.168.1.254

# 將ns1 & ns2 連到 logical switch ls0
create-ovn-ls-and-lsp   ls0 ns1 ns2
assign-iface-to-ovn-lsp ls0 ns1 ns2

建立 10.10.0.0/24的邏輯網路

和前一步完全相同,建立另一個logical switch,使用10.10.0.0/24網段。同時,設定namespace ns3的default gateway。


cd /opt/iTHome-2023/day-05
source helper.sh

# 建立namespace
create-ns ns3 10.10.0.1   10.10.0.254


# 將ns3 連到 logical switch ls1
create-ovn-ls-and-lsp   ls1 ns3
assign-iface-to-ovn-lsp ls1 ns3

建立logical router 連接二個網路

再來,建立一個logical router,並在上面新增二個logical router port,用來和二個logical switch相連。

create-ovn-lr lr1
connect-ovn-lr-to-ls lr1 ls0 192.168.1.254
connect-ovn-lr-to-ls lr1 ls1 10.10.0.254

我們深入看一下connect-ovn-lr-to-ls 這個function裡做了什麼事情。

# connect-ovn-lr-to-ls <logical_router_name> <logical_switch_name> <gw_ip_address>

# create a random mac
mac_addr=...

# port on logical router
ovn-nbctl lrp-add <logical_router_name> <lr-port-name> $mac_addr <gw_ip_address>/24

  
# router type port on logical switch
ovn-nbctl lsp-add <logical_switch_name> <ls-port-name>
ovn-nbctl lsp-set-type <ls-port-name> router
ovn-nbctl lsp-set-addresses <ls-port-name> "$mac_addr <gw_ip_address>"

# connect ports on both switch and ruter
ovn-nbctl lsp-set-options <ls-port-name> router-port=<lr-port-name>

在這個function裡,logical switch和logical router分別要做下列設定:

  1. logical switch會
    • 新建立一個type為router的port
    • 設定這個port要使用gateway ip
    • 設定在logical router上和router port對接的port的名稱
  2. logical router
    • 建立一個新的logical router port,
    • 設定port使用的gateway ip

和一般的router類似,因為192.168.1.0/24和10.10.0.0/24是直接和router相連的二個網路,所以不需特別設定route。

至此,整個logical router的範例已經設定完成,可以在ns1 裡試著連到 ns3.

ip netns exec ns1 ping -c 4 10.10.0.1
PING 10.10.0.1 (10.10.0.1) 56(84) bytes of data.
64 bytes from 10.10.0.1: icmp_seq=1 ttl=63 time=0.068 ms
64 bytes from 10.10.0.1: icmp_seq=2 ttl=63 time=0.040 ms
64 bytes from 10.10.0.1: icmp_seq=3 ttl=63 time=0.040 ms
64 bytes from 10.10.0.1: icmp_seq=4 ttl=63 time=0.069 ms

--- 10.10.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3071ms
rtt min/avg/max/mdev = 0.040/0.054/0.069/0.014 ms

Logical Flow

我們再次用ovn-trace來驗證虛擬網絡中的封包的路徑。可以看到,由logical switch port ls0-ns1 收到的封包,最後會由 ls1-ns3 送給namespace ns3。

ovn-trace 加上 --minimal 可以只顯示最後結果,你可以把 --minimal 省絡,仔細看一下封包是如何在不同的port之間傳送。

logical_router_port_mac=$(ovn-nbctl  --columns=mac       -f json  find logical_router_port name=lr1-ls0 | jq -r .data[][])
logical_switch_port_mac=$(ovn-nbctl  --columns=addresses -f json  find logical_switch_port name=ls0-ns1 | jq -r .data[][])

ovn-trace --minimal ls0 \
  "inport == \"ls0-ns1\" &&
   eth.src == ${logical_router_port_mac} &&
   ip4.src == 192.168.1.1 &&
   eth.dst == ${logical_router_port_mac} &&
   ip4.dst == 10.10.0.1 &&
   ip.ttl == 32"
# ip,reg14=0x1,vlan_tci=0x0000,dl_src=82:b7:3c:1f:45:b1,dl_dst=02:00:3f:3f:ee:13,nw_src=192.168.1.1,nw_dst=10.10.0.1,nw_proto=0,nw_tos=0,nw_ecn=0,nw_ttl=32
ip.ttl--;
eth.src = 02:00:94:aa:4f:0e;
eth.dst = de:b4:7d:c5:75:ac;
output("ls1-ns3");

ovn-nbctl本身就是用來和North bound DB 互動的工具,在這裡,我們透過ovn-nbctl 查詢 logical_router_port 和 logical_switch_port 二張table,把lr1-ls0 和ls0-ns1 這二個port的mac 資訊查出來。


今天的內容,我們透過Logical router,可以把不同的logical switch相連,讓不同的邏輯網路可以互連。


上一篇
Day-04: 跨節點的logical switch 與 GEVEVE Overlay Network
下一篇
Day-06: 連接虛擬與實體網路的localnet switch
系列文
在OpenStack Neutron的ovn-networking裡挖呀挖呀挖30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言